#include "mainwindow.h"

#include <QApplication>
#include<QAbstractItemModel>//所有项目模型的抽象基类
#include<QAbstractItemView>//所有视图的基类
#include <QTreeView>//树状视图类
#include<QSplitter>
#include<QDirModel>
#include<QListView>
#include<QTableView>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();
//    return a.exec();

    QDirModel model;//用来访问本地的文件目录结构的数据模型。自动获取当前文件系统的目录结构
    QTreeView tree;
    QListView list;
    QTableView table;
    QSplitter* left=new QSplitter(Qt::Horizontal,0);//以水平的方式分割
    QSplitter* right=new QSplitter(Qt::Vertical,left);//以垂直的方式分割，而right的放置要遵循left的原则，类似于left管理right的放置，right管理属于它的控件放置
       tree.setSelectionMode(QAbstractItemView::MultiSelection);
       //设置树形视图的选择模式为多选（MultiSelection），允许用户同时选择多个项目。
    tree.setModel(&model);
    list.setModel(&model);
    table.setModel(&model);
    left->addWidget(&tree);
    right->addWidget(&list);
    right->addWidget(&table);
      // 关键修改: 为列表视图添加双击展开功能
    QObject::connect(&list, &QListView::doubleClicked, [&](const QModelIndex &index) {
           // 检查双击的是否是目录
           if (model.isDir(index)) {
               // 设置列表视图的新根目录
               list.setRootIndex(index);
               // 同时更新表格视图以保持它们之间的同步
               table.setRootIndex(index);
               tree.setRootIndex(index);
           }
       });
    QObject::connect(&table, &QTableView::doubleClicked, [&](const QModelIndex &index) {
           // 检查双击的是否是目录
           if (model.isDir(index)) {
               // 设置列表视图的新根目录
               list.setRootIndex(index);
               // 同时更新表格视图以保持它们之间的同步
               table.setRootIndex(index);
               tree.setRootIndex(index);
           }
       });
    QObject::connect(&tree, &QTreeView::doubleClicked, [&](const QModelIndex &index) {
           // 检查双击的是否是目录
           if (model.isDir(index)) {
               // 设置列表视图的新根目录
               list.setRootIndex(index);
               // 同时更新表格视图以保持它们之间的同步
               table.setRootIndex(index);
               tree.setRootIndex(index);
           }
       });
    left->show();
    //right->show();

return a.exec();
}
